<template>
  <el-form size="small">
    <el-form-item>
      <el-radio v-model="radioValue" :label="1">
        不填，允许的通配符[, - * /]
      </el-radio>
    </el-form-item>

    <el-form-item>
      <el-radio v-model="radioValue" :label="2">
        每年
      </el-radio>
    </el-form-item>

    <el-form-item>
      <el-radio v-model="radioValue" :label="3">
        周期从
        <el-input-number v-model="cycle01" :min="fullYear" :max="2098" /> -
        <el-input-number v-model="cycle02" :min="cycle01 ? cycle01 + 1 : fullYear + 1" :max="2099" />
      </el-radio>
    </el-form-item>

    <el-form-item>
      <el-radio v-model="radioValue" :label="4">
        从
        <el-input-number v-model="average01" :min="fullYear" :max="2098" /> 年开始，每
        <el-input-number v-model="average02" :min="1" :max="2099 - average01 || fullYear" /> 年执行一次
      </el-radio>
    </el-form-item>

    <el-form-item>
      <el-radio v-model="radioValue" :label="5">
        指定
        <el-select v-model="checkboxList" clearable placeholder="可多选" multiple>
          <el-option v-for="item in 9" :key="item" :value="item - 1 + fullYear" :label="item - 1 + fullYear" />
        </el-select>
      </el-radio>
    </el-form-item>
  </el-form>
</template>

<script setup>
import { ref, computed, watch, onMounted } from 'vue'

const props = defineProps({
	check: {
		type: Function,
		required: true
	},
	month: {
		type: [String, Number],
		default: ''
	},
	cron: {
		type: Object,
		required: true
	}
})

const emit = defineEmits(['update'])

const fullYear = ref(0)
const radioValue = ref(1)
const cycle01 = ref(0)
const cycle02 = ref(0)
const average01 = ref(0)
const average02 = ref(1)
const checkboxList = ref([])
const checkNum = props.check

// 计算两个周期值
const cycleTotal = computed(() => {
	const cycleValue01 = checkNum(cycle01.value, fullYear.value, 2098)
	const cycleValue02 = checkNum(cycle02.value, cycleValue01 ? cycleValue01 + 1 : fullYear.value + 1, 2099)
	return cycleValue01 + '-' + cycleValue02
})

// 计算平均用到的值
const averageTotal = computed(() => {
	const averageValue01 = checkNum(average01.value, fullYear.value, 2098)
	const averageValue02 = checkNum(average02.value, 1, 2099 - averageValue01 || fullYear.value)
	return averageValue01 + '/' + averageValue02
})

// 计算勾选的checkbox值合集
const checkboxString = computed(() => {
	return checkboxList.value.join()
})

// 单选按钮值变化时
const radioChange = () => {
	switch (radioValue.value) {
		case 1:
			emit('update', 'year', '')
			break
		case 2:
			emit('update', 'year', '*')
			break
		case 3:
			emit('update', 'year', cycleTotal.value)
			break
		case 4:
			emit('update', 'year', averageTotal.value)
			break
		case 5:
			emit('update', 'year', checkboxString.value)
			break
	}
}

// 周期两个值变化时
const cycleChange = () => {
	if (radioValue.value === 3) {
		emit('update', 'year', cycleTotal.value)
	}
}

// 平均两个值变化时
const averageChange = () => {
	if (radioValue.value === 4) {
		emit('update', 'year', averageTotal.value)
	}
}

// checkbox值变化时
const checkboxChange = () => {
	if (radioValue.value === 5) {
		emit('update', 'year', checkboxString.value)
	}
}

onMounted(() => {
	// 仅获取当前年份
	fullYear.value = Number(new Date().getFullYear())
	cycle01.value = fullYear.value
	average01.value = fullYear.value
})

watch(radioValue, radioChange)
watch(cycleTotal, cycleChange)
watch(averageTotal, averageChange)
watch(checkboxString, checkboxChange)
</script>
